home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Interfaces / PInterfaces / CardServices.p < prev    next >
Encoding:
Text File  |  1995-08-23  |  29.0 KB  |  801 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        CardServices.p
  3.  
  4.     Contains:    This file contains constants and data structures that describe
  5.                 the client interface to Card and Socket Services.
  6.  
  7.      Version:    Technology: PCMCIA Software 2.0
  8.                 Package:    Universal Interfaces 2.1.1 in “MPW Latest” on ETO #19
  9.  
  10.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  14.                  stack.  Include the file and version information (from above)
  15.                  in the problem description and send to:
  16.                      Internet:    apple.bugs@applelink.apple.com
  17.                      AppleLink:    APPLE.BUGS
  18.   
  19. }
  20.  
  21. {$IFC UNDEFINED UsingIncludes}
  22. {$SETC UsingIncludes := 0}
  23. {$ENDC}
  24.  
  25. {$IFC NOT UsingIncludes}
  26.  UNIT CardServices;
  27.  INTERFACE
  28. {$ENDC}
  29.  
  30. {$IFC UNDEFINED __CARDSERVICES__}
  31. {$SETC __CARDSERVICES__ := 1}
  32.  
  33. {$I+}
  34. {$SETC CardServicesIncludes := UsingIncludes}
  35. {$SETC UsingIncludes := 1}
  36.  
  37.  
  38. {$IFC UNDEFINED __TYPES__}
  39. {$I Types.p}
  40. {$ENDC}
  41. {    ConditionalMacros.p                                            }
  42.  
  43. {$IFC UNDEFINED __PCCARDTUPLES__}
  44. {$I PCCardTuples.p}
  45. {$ENDC}
  46.  
  47. {$IFC UNDEFINED __MIXEDMODE__}
  48. {$I MixedMode.p}
  49. {$ENDC}
  50.  
  51. {$PUSH}
  52. {$ALIGN MAC68K}
  53. {$LibExport+}
  54.  
  55. CONST
  56.     CS_MAX_SOCKETS                = 32;                            { a long is used as a socket bitmap}
  57.  
  58. { ••• Should eventually move to <Gestalt.h>}
  59.     gestaltCardServicesAttr        = 'pccd';                        { Card Services attributes}
  60.     gestaltCardServicesPresent    = 0;                            { if set, Card Services is present}
  61.  
  62. { ••• Should eventually move to <Traps.h>}
  63.     _PCCardDispatch                = $AAF0;                        { Card Services entry trap}
  64.  
  65.     The PC Card Manager will migrate towards a complete Mac name space very soon.
  66.     Part of that process will be to reassign result codes to a range reserved for
  67.     the PC Card Manager...the range will be...-9050 to -9305 (decimal inclusive).
  68. }
  69. {    result codes}
  70.     kCSBadAdapterErr            = -9050;                        { invalid adapter number}
  71.     kCSBadAttributeErr            = -9051;                        { specified attributes field value is invalid}
  72.     kCSBadBaseErr                = -9052;                        { specified base system memory address is invalid}
  73.     kCSBadEDCErr                = -9053;                        { specified EDC generator specified is invalid}
  74.     kCSBadIRQErr                = -9054;                        { specified IRQ level is invalid}
  75.     kCSBadOffsetErr                = -9055;                        { specified PC card memory array offset is invalid}
  76.     kCSBadPageErr                = -9056;                        { specified page is invalid}
  77.     kCSBadSizeErr                = -9057;                        { specified size is invalid}
  78.     kCSBadSocketErr                = -9058;                        { specified logical or physical socket number is invalid}
  79.     kCSBadTypeErr                = -9059;                        { specified window or interface type is invalid}
  80.     kCSBadVccErr                = -9060;                        { specified Vcc power level index is invalid}
  81.     kCSBadVppErr                = -9061;                        { specified Vpp1 or Vpp2 power level index is invalid}
  82.     kCSBadWindowErr                = -9062;                        { specified window is invalid}
  83.     kCSBadArgLengthErr            = -9063;                        { ArgLength argument is invalid}
  84.     kCSBadArgsErr                = -9064;                        { values in argument packet are invalid}
  85.     kCSBadHandleErr                = -9065;                        { clientHandle is invalid}
  86.     kCSBadCISErr                = -9066;                        { CIS on card is invalid}
  87.     kCSBadSpeedErr                = -9067;                        { specified speed is unavailable}
  88.     kCSReadFailureErr            = -9068;                        { unable to complete read request}
  89.     kCSWriteFailureErr            = -9069;                        { unable to complete write request}
  90.     kCSGeneralFailureErr        = -9070;                        { an undefined error has occurred}
  91.     kCSNoCardErr                = -9071;                        { no PC card in the socket}
  92.     kCSUnsupportedFunctionErr    = -9072;                        { function is not supported by this implementation}
  93.     kCSUnsupportedModeErr        = -9073;                        { mode is not supported}
  94.     kCSBusyErr                    = -9074;                        { unable to process request at this time - try later}
  95.     kCSWriteProtectedErr        = -9075;                        { media is write-protected}
  96.     kCSConfigurationLockedErr    = -9076;                        { a configuration has already been locked}
  97.     kCSInUseErr                    = -9077;                        { requested resource is being used by a client}
  98.     kCSNoMoreItemsErr            = -9078;                        { there are no more of the requested item}
  99.     kCSOutOfResourceErr            = -9079;                        { Card Services has exhausted the resource}
  100.  
  101. {    messages sent to client's event handler}
  102.     kCSNullMessage                = $00;                            { no messages pending (not sent to clients)}
  103.     kCSCardInsertionMessage        = $01;                            { card has been inserted into the socket}
  104.     kCSCardRemovalMessage        = $02;                            { card has been removed from the socket}
  105.     kCSCardLockMessage            = $03;                            { card is locked into the socket with a mechanical latch}
  106.     kCSCardUnlockMessage        = $04;                            { card is no longer locked into the socket}
  107.     kCSCardReadyMessage            = $05;                            { card is ready to be accessed}
  108.     kCSCardResetMessage            = $06;                            { physical reset has completed}
  109.     kCSInsertionRequestMessage    = $07;                            { request to insert a card using insertion motor}
  110.     kCSInsertionCompleteMessage    = $08;                            { insertion motor has finished inserting a card}
  111.     kCSEjectionRequestMessage    = $09;                            { user or other client is requesting a card ejection}
  112.     kCSEjectionFailedMessage    = $0A;                            { eject failure due to electrical/mechanical problems}
  113.     kCSPMResumeMessage            = $0B;                            { power management resume (TBD)}
  114.     kCSPMSuspendMessage            = $0C;                            { power management suspend (TBD)}
  115.     kCSResetPhysicalMessage        = $0D;                            { physical reset is about to occur on this card}
  116.     kCSResetRequestMessage        = $0E;                            { physical reset has been requested by a client}
  117.     kCSResetCompleteMessage        = $0F;                            { ResetCard() background reset has completed}
  118.     kCSBatteryDeadMessage        = $10;                            { battery is no longer useable, data will be lost}
  119.     kCSBatteryLowMessage        = $11;                            { battery is weak and should be replaced}
  120.     kCSWriteProtectMessage        = $12;                            { card is now write protected}
  121.     kCSWriteEnabledMessage        = $13;                            { card is now write enabled}
  122.     kCSClientInfoMessage        = $14;                            { client is to return client information}
  123.     kCSSSUpdatedMessage            = $15;                            { AddSocketServices/ReplaceSocket services has changed SS support}
  124.     kCSFunctionInterruptMessage    = $16;                            { card function interrupt}
  125.     kCSAccessErrorMessage        = $17;                            { client bus errored on access to socket}
  126.     kCSCardUnconfiguredMessage    = $18;                            { a CARD_READY was delivered to all clients and no client }
  127. {    requested a configuration for the socket}
  128.     kCSStatusChangedMessage        = $19;                            { status change for cards in I/O mode}
  129.  
  130. {
  131.     The following is a mapping of the PCMCIA name space to the Macintosh name space.
  132.     These two enum lists will be removed and given to developers as a separate file.
  133. }
  134.     SUCCESS                        = noErr;
  135.     BAD_ADAPTER                    = kCSBadAdapterErr;
  136.     BAD_ATTRIBUTE                = kCSBadAttributeErr;
  137.     BAD_BASE                    = kCSBadBaseErr;
  138.     BAD_EDC                        = kCSBadEDCErr;
  139.     BAD_IRQ                        = kCSBadIRQErr;
  140.     BAD_OFFSET                    = kCSBadOffsetErr;
  141.     BAD_PAGE                    = kCSBadPageErr;
  142.     BAD_SIZE                    = kCSBadSizeErr;
  143.     BAD_SOCKET                    = kCSBadSocketErr;
  144.     BAD_TYPE                    = kCSBadTypeErr;
  145.     BAD_VCC                        = kCSBadVccErr;
  146.     BAD_VPP                        = kCSBadVppErr;
  147.     BAD_WINDOW                    = kCSBadWindowErr;
  148.     BAD_ARG_LENGTH                = kCSBadArgLengthErr;
  149.     BAD_ARGS                    = kCSBadArgsErr;
  150.     BAD_HANDLE                    = kCSBadHandleErr;
  151.     BAD_CIS                        = kCSBadCISErr;
  152.     BAD_SPEED                    = kCSBadSpeedErr;
  153.     READ_FAILURE                = kCSReadFailureErr;
  154.     WRITE_FAILURE                = kCSWriteFailureErr;
  155.     GENERAL_FAILURE                = kCSGeneralFailureErr;
  156.     NO_CARD                        = kCSNoCardErr;
  157.     UNSUPPORTED_FUNCTION        = kCSUnsupportedFunctionErr;
  158.     UNSUPPORTED_MODE            = kCSUnsupportedModeErr;
  159.     BUSY                        = kCSBusyErr;
  160.     WRITE_PROTECTED                = kCSWriteProtectedErr;
  161.     CONFIGURATION_LOCKED        = kCSConfigurationLockedErr;
  162.     IN_USE                        = kCSInUseErr;
  163.     NO_MORE_ITEMS                = kCSNoMoreItemsErr;
  164.     OUT_OF_RESOURCE                = kCSOutOfResourceErr;
  165.  
  166. {    messages sent to client's event handler}
  167.     NULL_MESSAGE                = kCSNullMessage;
  168.     CARD_INSERTION                = kCSCardInsertionMessage;
  169.     CARD_REMOVAL                = kCSCardRemovalMessage;
  170.     CARD_LOCK                    = kCSCardLockMessage;
  171.     CARD_UNLOCK                    = kCSCardUnlockMessage;
  172.     CARD_READY                    = kCSCardReadyMessage;
  173.     CARD_RESET                    = kCSCardResetMessage;
  174.     INSERTION_REQUEST            = kCSInsertionRequestMessage;
  175.     INSERTION_COMPLETE            = kCSInsertionCompleteMessage;
  176.     EJECTION_REQUEST            = kCSEjectionRequestMessage;
  177.     EJECTION_FAILED                = kCSEjectionFailedMessage;
  178.     PM_RESUME                    = kCSPMResumeMessage;
  179.     PM_SUSPEND                    = kCSPMSuspendMessage;
  180.     RESET_PHYSICAL                = kCSResetPhysicalMessage;
  181.     RESET_REQUEST                = kCSResetRequestMessage;
  182.     RESET_COMPLETE                = kCSResetCompleteMessage;
  183.     BATTERY_DEAD                = kCSBatteryDeadMessage;
  184.     BATTERY_LOW                    = kCSBatteryLowMessage;
  185.     WRITE_PROTECT                = kCSWriteProtectMessage;
  186.     WRITE_ENABLED                = kCSWriteEnabledMessage;
  187.     CLIENT_INFO                    = kCSClientInfoMessage;
  188.     SS_UPDATED                    = kCSSSUpdatedMessage;
  189.     FUNCTION_INTERRUPT            = kCSFunctionInterruptMessage;
  190.     ACCESS_ERROR                = kCSAccessErrorMessage;
  191.     CARD_UNCONFIGURED            = kCSCardUnconfiguredMessage;
  192.     STATUS_CHANGED                = kCSStatusChangedMessage;
  193.  
  194. {----------------        CSAccessConfigurationRegister    ----------------}
  195.  
  196. TYPE
  197.     AccessConfigurationRegisterPB = RECORD
  198.         socket:                    UInt16;                                    {  -> global socket number}
  199.         action:                    SInt8; (* UInt8 *)                        {  -> read/write}
  200.         offset:                    SInt8; (* UInt8 *)                        {  -> offset from config register base}
  201.         value:                    SInt8; (* UInt8 *)                        { <-> value to read/write}
  202.         padding:                ARRAY [0..0] OF SInt8; (* UInt8 *)        { }
  203.     END;
  204.  
  205. {    ‘action’ field values}
  206.  
  207. CONST
  208.     kCSReadConfigRegister        = $00;
  209.     kCSWriteConfigRegister        = $01;
  210.  
  211. {----------------        CSGetCardServicesInfo            ----------------}
  212.  
  213. TYPE
  214.     GetCardServicesInfoPB = RECORD
  215.         signature:                ARRAY [0..1] OF SInt8; (* UInt8 *)        { <-  two ascii chars 'CS'}
  216.         count:                    UInt16;                                    { <-  total number of sockets installed}
  217.         revision:                UInt16;                                    { <-  BCD}
  218.         csLevel:                UInt16;                                    { <-  BCD}
  219.         reserved:                UInt16;                                    {  -> zero}
  220.         vStrLen:                UInt16;                                    { <-> in: client's buffer size, out: vendor string length}
  221.         vendorString:            ^UInt8;                                    { <-> in: pointer to buffer to hold CS vendor string (zero-terminated)}
  222.         {      out: CS vendor string copied to buffer}
  223.     END;
  224.  
  225. {----------------        CSGetClientInfo                    ----------------}
  226.     ClientInfoParam = RECORD
  227.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  228.         attributes:                UInt16;                                    { <-> subfunction + bitmapped client attributes}
  229.         revision:                UInt16;                                    { <-  BCD value of client's revision}
  230.         csLevel:                UInt16;                                    { <-  BCD value of CS release}
  231.         revDate:                UInt16;                                    { <-  revision date: y[15-9], m[8-5], d[4-0]}
  232.         nameLen:                SInt16;                                    { <-> in: max length of client name string, out: actual length}
  233.         vStringLen:                SInt16;                                    { <-> in: max length of vendor string, out: actual length}
  234.         nameString:                ^UInt8;                                    { <-  pointer to client name string (zero-terminated)}
  235.         vendorString:            ^UInt8;                                    { <-  pointer to vendor string (zero-terminated)}
  236.     END;
  237.  
  238. { upper byte of attributes is kCSCardNameSubfunction,}
  239. {                               kCSCardTypeSubfunction,}
  240. {                               kCSHelpStringSubfunction}
  241.     AlternateTextStringParam = RECORD
  242.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  243.         attributes:                UInt16;                                    { <-> subfunction + bitmapped client attributes}
  244.         socket:                    UInt16;                                    {  -> logical socket number}
  245.         reserved:                UInt16;                                    {  -> zero}
  246.         length:                    SInt16;                                    { <-> in: max length of string, out: actual length}
  247.         text:                    ^UInt8;                                    { <-  pointer to string (zero-terminated)}
  248.     END;
  249.  
  250. { upper byte of attributes is kCSCardIconSubfunction}
  251.     AlternateCardIconParam = RECORD
  252.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  253.         attributes:                UInt16;                                    { <-> subfunction + bitmapped client attributes}
  254.         socket:                    UInt16;                                    {  -> logical socket number}
  255.         iconSuite:                Handle;                                    { <-  handle to icon suite containing all icons}
  256.     END;
  257.  
  258. { upper byte of attributes is kCSActionProcSubfunction}
  259.     CustomActionProcParam = RECORD
  260.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  261.         attributes:                UInt16;                                    { <-> subfunction + bitmapped client attributes}
  262.         socket:                    UInt16;                                    {  -> logical socket number}
  263.     END;
  264.  
  265.     GetClientInfoPB = RECORD
  266.         CASE INTEGER OF
  267.         0: (
  268.             clientInfo:                    ClientInfoParam;
  269.            );
  270.         1: (
  271.             alternateTextString:        AlternateTextStringParam;
  272.            );
  273.         2: (
  274.             alternateIcon:                AlternateCardIconParam;
  275.            );
  276.         3: (
  277.             customActionProc:            CustomActionProcParam;
  278.            );
  279.  
  280.     END;
  281.  
  282. {    ‘attributes’ field values}
  283.  
  284. CONST
  285.     kCSMemoryClient                = $0001;
  286.     kCSIOClient                    = $0004;
  287.     kCSClientTypeMask            = $0007;
  288.     kCSShareableCardInsertEvents = $0008;
  289.     kCSExclusiveCardInsertEvents = $0010;
  290.     kCSInfoSubfunctionMask        = $FF00;
  291.     kCSClientInfoSubfunction    = $0000;
  292.     kCSCardNameSubfunction        = $8000;
  293.     kCSCardTypeSubfunction        = $8100;
  294.     kCSHelpStringSubfunction    = $8200;
  295.     kCSCardIconSubfunction        = $8300;
  296.     kCSActionProcSubfunction    = $8400;
  297.  
  298. {----------------        CSGetConfigurationInfo            ----------------}
  299. {----------------        CSModifyConfiguration            ----------------}
  300. {----------------        CSRequestConfiguration            ----------------}
  301.  
  302. TYPE
  303.     GetModRequestConfigInfoPB = RECORD
  304.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  305.         socket:                    UInt16;                                    {  -> logical socket number}
  306.         attributes:                UInt16;                                    { <-> bitmap of configuration attributes}
  307.         vcc:                    SInt8; (* UInt8 *)                        { <-> Vcc setting}
  308.         vpp1:                    SInt8; (* UInt8 *)                        { <-> Vpp1 setting}
  309.         vpp2:                    SInt8; (* UInt8 *)                        { <-> Vpp2 setting}
  310.         intType:                SInt8; (* UInt8 *)                        { <-> interface type (memory or memory+I/O)}
  311.         configBase:                UInt32;                                    { <-> card base address of configuration registers}
  312.         status:                    SInt8; (* UInt8 *)                        { <-> card status register setting, if present}
  313.         pin:                    SInt8; (* UInt8 *)                        { <-> card pin register setting, if present}
  314.         copy:                    SInt8; (* UInt8 *)                        { <-> card socket/copy register setting, if present}
  315.         configIndex:            SInt8; (* UInt8 *)                        { <-> card option register setting, if present}
  316.         present:                SInt8; (* UInt8 *)                        { <-> bitmap of which configuration registers are present}
  317.         firstDevType:            SInt8; (* UInt8 *)                        { <-  from DeviceID tuple}
  318.         funcCode:                SInt8; (* UInt8 *)                        { <-  from FuncID tuple}
  319.         sysInitMask:            SInt8; (* UInt8 *)                        { <-  from FuncID tuple}
  320.         manufCode:                UInt16;                                    { <-  from ManufacturerID tuple}
  321.         manufInfo:                UInt16;                                    { <-  from ManufacturerID tuple}
  322.         cardValues:                SInt8; (* UInt8 *)                        { <-  valid card register values}
  323.         padding:                ARRAY [0..0] OF SInt8; (* UInt8 *)        { }
  324.     END;
  325.  
  326. {    ‘attributes’ field values}
  327.  
  328. CONST
  329.     kCSExclusivelyUsed            = $0001;
  330.     kCSEnableIREQs                = $0002;
  331.     kCSVccChangeValid            = $0004;
  332.     kCSVpp1ChangeValid            = $0008;
  333.     kCSVpp2ChangeValid            = $0010;
  334.     kCSValidClient                = $0020;
  335.     kCSSleepPower                = $0040;                        { request that power be applied to socket during Sleep}
  336.     kCSLockSocket                = $0080;
  337.     kCSTurnOnInUse                = $0100;
  338.  
  339. {    ‘intType’ field values}
  340.     kCSMemoryInterface            = $01;
  341.     kCSMemory_And_IO_Interface    = $02;
  342.  
  343. {    ‘present’ field values}
  344.     kCSOptionRegisterPresent    = $01;
  345.     kCSStatusRegisterPresent    = $02;
  346.     kCSPinReplacementRegisterPresent = $04;
  347.     kCSCopyRegisterPresent        = $08;
  348.  
  349. {    ‘cardValues’ field values}
  350.     kCSOptionValueValid            = $01;
  351.     kCSStatusValueValid            = $02;
  352.     kCSPinReplacementValueValid    = $04;
  353.     kCSCopyValueValid            = $08;
  354.  
  355. {----------------        CSGetClientEventMask            ----------------}
  356. {----------------        CSSetClientEventMask            ----------------}
  357.  
  358. TYPE
  359.     GetSetClientEventMaskPB = RECORD
  360.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  361.         attributes:                UInt16;                                    { <-> bitmap of attributes}
  362.         eventMask:                UInt16;                                    { <-> bitmap of events to be passed to client for this socket}
  363.         socket:                    UInt16;                                    {  -> logical socket number}
  364.     END;
  365.  
  366. {    ‘attributes’ field values}
  367.  
  368. CONST
  369.     kCSEventMaskThisSocketOnly    = $0001;
  370.  
  371. {    ‘eventMask’ field values}
  372.     kCSWriteProtectEvent        = $0001;
  373.     kCSCardLockChangeEvent        = $0002;
  374.     kCSEjectRequestEvent        = $0004;
  375.     kCSInsertRequestEvent        = $0008;
  376.     kCSBatteryDeadEvent            = $0010;
  377.     kCSBatteryLowEvent            = $0020;
  378.     kCSReadyChangeEvent            = $0040;
  379.     kCSCardDetectChangeEvent    = $0080;
  380.     kCSPMChangeEvent            = $0100;
  381.     kCSResetEvent                = $0200;
  382.     kCSSSUpdateEvent            = $0400;
  383.     kCSFunctionInterrupt        = $0800;
  384.     kCSAllEvents                = $FFFF;
  385.  
  386. {----------------        CSGetFirstClient                ----------------}
  387. {----------------        CSGetNextClient                    ----------------}
  388.  
  389. TYPE
  390.     GetClientPB = RECORD
  391.         clientHandle:            UInt32;                                    { <-  clientHandle for this client}
  392.         socket:                    UInt16;                                    {  -> logical socket number}
  393.         attributes:                UInt16;                                    {  -> bitmap of attributes}
  394.     END;
  395.  
  396. {    ‘attributes’ field values}
  397.  
  398. CONST
  399.     kCSClientsForAllSockets        = $0000;
  400.     kCSClientsThisSocketOnly    = $0001;
  401.  
  402. {----------------        CSGetFirstTuple                    ----------------}
  403. {----------------        CSGetNextTuple                    ----------------}
  404. {----------------        CSGetTupleData                    ----------------}
  405.  
  406. TYPE
  407.     GetTuplePB = RECORD
  408.         socket:                    UInt16;                                    {  -> logical socket number}
  409.         attributes:                UInt16;                                    {  -> bitmap of attributes}
  410.         desiredTuple:            SInt8; (* UInt8 *)                        {  -> desired tuple code value, or $FF for all}
  411.         tupleOffset:            SInt8; (* UInt8 *)                        {  -> offset into tuple from link byte}
  412.         flags:                    UInt16;                                    { <-> internal use}
  413.         linkOffset:                UInt32;                                    { <-> internal use}
  414.         cisOffset:                UInt32;                                    { <-> internal use}
  415.         CASE INTEGER OF
  416.         0: (
  417.             tupleCode:                    SInt8; (* UInt8 *)                    { <-  tuple code found}
  418.             tupleLink:                    SInt8; (* UInt8 *)                    { <-  link value for tuple found}
  419.            );
  420.         1: (
  421.             tupleDataMax:                UInt16;                                {  -> maximum size of tuple data area}
  422.             tupleDataLen:                UInt16;                                { <-  number of bytes in tuple body}
  423.             tupleData:                    TupleBody;                            { <-  tuple data}
  424.            );
  425.  
  426.     END;
  427.  
  428. {    ‘attributes’ field values}
  429.  
  430. CONST
  431.     kCSReturnLinkTuples            = $0001;
  432.  
  433. {----------------        CSRequestSocketMask                ----------------}
  434. {----------------        CSReleaseSocketMask                ----------------}
  435.  
  436. TYPE
  437.     ReqRelSocketMaskPB = RECORD
  438.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  439.         socket:                    UInt16;                                    {  -> logical socket}
  440.         eventMask:                UInt16;                                    {  -> bitmap of events to be passed to client for this socket}
  441.     END;
  442.  
  443. {    ‘eventMask’ field values (see above for Get/SetClientEventMask}
  444. {----------------        CSGetStatus                        ----------------}
  445.     GetStatusPB = RECORD
  446.         socket:                    UInt16;                                    {  -> logical socket number}
  447.         cardState:                UInt16;                                    { <-  current state of installed card}
  448.         socketState:            UInt16;                                    { <-  current state of the socket}
  449.     END;
  450.  
  451. {    ‘cardState’ field values}
  452.  
  453. CONST
  454.     kCSWriteProtected            = $0001;
  455.     kCSCardLocked                = $0002;
  456.     kCSEjectRequest                = $0004;
  457.     kCSInsertRequest            = $0008;
  458.     kCSBatteryDead                = $0010;
  459.     kCSBatteryLow                = $0020;
  460.     kCSReady                    = $0040;
  461.     kCSCardDetected                = $0080;
  462.  
  463. {    ‘socketState’ field values}
  464.     kCSWriteProtectChanged        = $0001;
  465.     kCSCardLockChanged            = $0002;
  466.     kCSEjectRequestPending        = $0004;
  467.     kCSInsertRequestPending        = $0008;
  468.     kCSBatteryDeadChanged        = $0010;
  469.     kCSBatteryLowChanged        = $0020;
  470.     kCSReadyChanged                = $0040;
  471.     kCSCardDetectChanged        = $0080;
  472.  
  473. {----------------        CSModifyWindow                    ----------------}
  474. {----------------        CSReleaseWindow                    ----------------}
  475. {----------------        CSRequestWindow                    ----------------}
  476.  
  477. TYPE
  478.     ReqModRelWindowPB = RECORD
  479.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  480.         windowHandle:            UInt32;                                    { <-> window descriptor}
  481.         socket:                    UInt16;                                    {  -> logical socket number}
  482.         attributes:                UInt16;                                    {  -> window attributes (bitmap)}
  483.         base:                    UInt32;                                    { <-> system base address}
  484.         size:                    UInt32;                                    { <-> memory window size}
  485.         accessSpeed:            SInt8; (* UInt8 *)                        {  -> window access speed (bitmap)}
  486.         {        (not applicable for I/O mode)}
  487.         padding:                ARRAY [0..0] OF SInt8; (* UInt8 *)        { }
  488.     END;
  489.  
  490. {    ‘attributes’ field values}
  491.  
  492. CONST
  493.     kCSMemoryWindow                = $0001;
  494.     kCSIOWindow                    = $0002;
  495.     kCSAttributeWindow            = $0004;                        { not normally used by Card Services clients}
  496.     kCSWindowTypeMask            = $0007;
  497.     kCSEnableWindow                = $0008;
  498.     kCSAccessSpeedValid            = $0010;
  499.     kCSLittleEndian                = $0020;                        { configure socket for little endianess}
  500.     kCS16BitDataPath            = $0040;                        {}
  501.     kCSWindowPaged                = $0080;                        { }
  502.     kCSWindowShared                = $0100;                        {}
  503.     kCSWindowFirstShared        = $0200;                        { }
  504.     kCSWindowProgrammable        = $0400;                        { }
  505.  
  506. {    ‘accessSpeed’ field values}
  507.     kCSDeviceSpeedCodeMask        = $07;
  508.     kCSSpeedExponentMask        = $07;
  509.     kCSSpeedMantissaMask        = $78;
  510.     kCSUseWait                    = $80;
  511.     kCSAccessSpeed250nsec        = $01;
  512.     kCSAccessSpeed200nsec        = $02;
  513.     kCSAccessSpeed150nsec        = $03;
  514.     kCSAccessSpeed100nsec        = $04;
  515.     kCSExtAccSpeedMant1pt0        = $01;
  516.     kCSExtAccSpeedMant1pt2        = $02;
  517.     kCSExtAccSpeedMant1pt3        = $03;
  518.     kCSExtAccSpeedMant1pt5        = $04;
  519.     kCSExtAccSpeedMant2pt0        = $05;
  520.     kCSExtAccSpeedMant2pt5        = $06;
  521.     kCSExtAccSpeedMant3pt0        = $07;
  522.     kCSExtAccSpeedMant3pt5        = $08;
  523.     kCSExtAccSpeedMant4pt0        = $09;
  524.     kCSExtAccSpeedMant4pt5        = $0A;
  525.     kCSExtAccSpeedMant5pt0        = $0B;
  526.     kCSExtAccSpeedMant5pt5        = $0C;
  527.     kCSExtAccSpeedMant6pt0        = $0D;
  528.     kCSExtAccSpeedMant7pt0        = $0E;
  529.     kCSExtAccSpeedMant8pt0        = $0F;
  530.     kCSExtAccSpeedExp1ns        = $00;
  531.     kCSExtAccSpeedExp10ns        = $01;
  532.     kCSExtAccSpeedExp100ns        = $02;
  533.     kCSExtAccSpeedExp1us        = $03;
  534.     kCSExtAccSpeedExp10us        = $04;
  535.     kCSExtAccSpeedExp100us        = $05;
  536.     kCSExtAccSpeedExp1ms        = $06;
  537.     kCSExtAccSpeedExp10ms        = $07;
  538.  
  539. {----------------        CSRegisterClient                ----------------}
  540. {----------------        CSDeregisterClient                ----------------}
  541.  
  542. TYPE
  543.     ClientCallbackPB = RECORD
  544.         message:                UInt16;                                    {  -> which event this is}
  545.         socket:                    UInt16;                                    {  -> logical socket number}
  546.         info:                    UInt16;                                    {  -> function-specific}
  547.         misc:                    UInt16;                                    {  -> function-specific}
  548.         reserved:                Ptr;                                    {  -> pointer to MTD request block}
  549.         buffer:                    Ptr;                                    {  -> function-specific}
  550.         clientData:                Ptr;                                    {  -> pointer to client's data (from RegisterClient)}
  551.     END;
  552.  
  553.     ClientCallbackPBPtr = ^ClientCallbackPB;
  554.  
  555.     PCCardCSClientProcPtr = ProcPtr;  { FUNCTION PCCardCSClient(ccPBPtr: ClientCallbackPBPtr): UInt16; }
  556.     PCCardCSClientUPP = UniversalProcPtr;
  557.  
  558. CONST
  559.     uppPCCardCSClientProcInfo = $000000E0; { FUNCTION (4 byte param): 2 byte result; }
  560.  
  561. FUNCTION NewPCCardCSClientProc(userRoutine: PCCardCSClientProcPtr): PCCardCSClientUPP;
  562.     {$IFC NOT GENERATINGCFM }
  563.     INLINE $2E9F;
  564.     {$ENDC}
  565.  
  566. FUNCTION CallPCCardCSClientProc(ccPBPtr: ClientCallbackPBPtr; userRoutine: PCCardCSClientUPP): UInt16;
  567.     {$IFC NOT GENERATINGCFM}
  568.     INLINE $205F, $4E90;
  569.     {$ENDC}
  570.  
  571. TYPE
  572.     RegisterClientPB = RECORD
  573.         clientHandle:            UInt32;                                    { <-  client descriptor}
  574.         clientEntry:            PCCardCSClientUPP;                        {  -> universal procPtr to client's event handler}
  575.         attributes:                UInt16;                                    {  -> bitmap of client attributes}
  576.         eventMask:                UInt16;                                    {  -> bitmap of events to notify client}
  577.         clientData:                Ptr;                                    {  -> pointer to client's data}
  578.         version:                UInt16;                                    {  -> Card Services version this client expects}
  579.     END;
  580.  
  581. {    ‘attributes’ field values (see GetClientInfo)}
  582. {    kCSMemoryClient                    = 0x0001,}
  583. {    kCSIOClient                        = 0x0004,}
  584. {    kCSShareableCardInsertEvents    = 0x0008,}
  585. {    kCSExclusiveCardInsertEvents    = 0x0010}
  586. {----------------        CSReleaseConfiguration            ----------------}
  587.     ReleaseConfigurationPB = RECORD
  588.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  589.         socket:                    UInt16;                                    {  -> }
  590.     END;
  591.  
  592. {----------------        CSResetCard                        ----------------}
  593.     ResetCardPB = RECORD
  594.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  595.         socket:                    UInt16;                                    {  -> }
  596.         attributes:                UInt16;                                    {  -> xxx}
  597.     END;
  598.  
  599. {----------------        CSValidateCIS                    ----------------}
  600.     ValidateCISPB = RECORD
  601.         socket:                    UInt16;                                    {  -> }
  602.         chains:                    UInt16;                                    {  -> whether link/null tuples should be included}
  603.     END;
  604.  
  605. {----------------        CSVendorSpecific                ----------------}
  606.     VendorSpecificPB = RECORD
  607.         clientHandle:            UInt32;                                    {  -> clientHandle returned by RegisterClient}
  608.         vsCode:                    UInt16;
  609.         socket:                    UInt16;
  610.         dataLen:                UInt32;                                    {  -> length of buffer pointed to by vsDataPtr}
  611.         vsDataPtr:                ^UInt8;                                    {  -> Card Services version this client expects}
  612.     END;
  613.  
  614. {    ‘vsCode’ field values}
  615.  
  616. CONST
  617.     vsAppleReserved                = $0000;
  618.     vsEjectCard                    = $0001;
  619.     vsGetCardInfo                = $0002;
  620.     vsEnableSocketEvents        = $0003;
  621.     vsGetCardLocationIcon        = $0004;
  622.     vsGetCardLocationText        = $0005;
  623.     vsGetAdapterInfo            = $0006;
  624.  
  625. {///////////////////////////////////////////////////////////////////////////////////////}
  626. {}
  627. {    GetAdapterInfo parameter block (vendor-specific call #6)}
  628.  
  629. TYPE
  630.     GetAdapterInfoPB = RECORD
  631.         attributes:                UInt32;                                    { <-  capabilties of socket's adapter}
  632.         revision:                UInt16;                                    { <-  id of adapter}
  633.         reserved:                UInt16;                                    { }
  634.         numVoltEntries:            UInt16;                                    { <-  number of valid voltage values}
  635.         voltages:                ^UInt8;                                    { <-> array of BCD voltage values}
  636.     END;
  637.  
  638. {    ‘attributes’ field values}
  639.  
  640. CONST
  641.     kCSLevelModeInterrupts        = $00000001;
  642.     kCSPulseModeInterrupts        = $00000002;
  643.     kCSProgrammableWindowAddr    = $00000004;
  644.     kCSProgrammableWindowSize    = $00000008;
  645.     kCSSocketSleepPower            = $00000010;
  646.     kCSSoftwareEject            = $00000020;
  647.     kCSLockableSocket            = $00000040;
  648.     kCSInUseIndicator            = $00000080;
  649.  
  650. {///////////////////////////////////////////////////////////////////////////////////////}
  651. {}
  652. {    GetCardInfo parameter block (vendor-specific call #2)}
  653.  
  654. TYPE
  655.     GetCardInfoPB = RECORD
  656.         cardType:                SInt8; (* UInt8 *)                        { <-  type of card in this socket (defined at top of file)}
  657.         subType:                SInt8; (* UInt8 *)                        { <-  more detailed card type (defined at top of file)}
  658.         reserved:                UInt16;                                    { <-> reserved (should be set to zero)}
  659.         cardNameLen:            UInt16;                                    {  -> maximum length of card name to be returned}
  660.         vendorNameLen:            UInt16;                                    {  -> maximum length of vendor name to be returned}
  661.         cardName:                ^UInt8;                                    {  -> pointer to card name string (read from CIS), or nil}
  662.         vendorName:                ^UInt8;                                    {  -> pointer to vendor name string (read from CIS), or nil}
  663.     END;
  664.  
  665. {    GetCardInfo card types}
  666.  
  667. CONST
  668.     kCSUnknownCardType            = 0;
  669.     kCSMultiFunctionCardType    = 1;
  670.     kCSMemoryCardType            = 2;
  671.     kCSSerialPortCardType        = 3;
  672.     kCSSerialOnlyType            = 0;
  673.     kCSDataModemType            = 1;
  674.     kCSFaxModemType                = 2;
  675.     kCSFaxAndDataModemMask        = 0+(kCSDataModemType + kCSFaxModemType);
  676.     kCSVoiceEncodingType        = 4;
  677.     kCSParallelPortCardType        = 4;
  678.     kCSFixedDiskCardType        = 5;
  679.     kCSUnknownFixedDiskType        = 0;
  680.     kCSATAInterface                = 1;
  681.     kCSRotatingDevice            = 0+(0 * (2**(7)));
  682.     kCSSiliconDevice            = 0+(1 * (2**(7)));
  683.     kCSVideoAdaptorCardType        = 6;
  684.     kCSNetworkAdaptorCardType    = 7;
  685.     kCSAIMSCardType                = 8;
  686.     kCSNumCardTypes                = 9;
  687.  
  688.  
  689. FUNCTION CSVendorSpecific(VAR pb: VendorSpecificPB): OSErr;
  690.     {$IFC NOT GENERATINGCFM}
  691.     INLINE $7000, $AAF0;
  692.     {$ENDC}
  693. FUNCTION CSRegisterClient(VAR pb: RegisterClientPB): OSErr;
  694.     {$IFC NOT GENERATINGCFM}
  695.     INLINE $7001, $AAF0;
  696.     {$ENDC}
  697. FUNCTION CSDeregisterClient(VAR pb: RegisterClientPB): OSErr;
  698.     {$IFC NOT GENERATINGCFM}
  699.     INLINE $7002, $AAF0;
  700.     {$ENDC}
  701. FUNCTION CSGetFirstTuple(VAR pb: GetTuplePB): OSErr;
  702.     {$IFC NOT GENERATINGCFM}
  703.     INLINE $7003, $AAF0;
  704.     {$ENDC}
  705. FUNCTION CSGetNextTuple(VAR pb: GetTuplePB): OSErr;
  706.     {$IFC NOT GENERATINGCFM}
  707.     INLINE $7004, $AAF0;
  708.     {$ENDC}
  709. FUNCTION CSGetTupleData(VAR pb: GetTuplePB): OSErr;
  710.     {$IFC NOT GENERATINGCFM}
  711.     INLINE $7005, $AAF0;
  712.     {$ENDC}
  713. FUNCTION CSGetConfigurationInfo(VAR pb: GetModRequestConfigInfoPB): OSErr;
  714.     {$IFC NOT GENERATINGCFM}
  715.     INLINE $7006, $AAF0;
  716.     {$ENDC}
  717. FUNCTION CSGetCardServicesInfo(VAR pb: GetCardServicesInfoPB): OSErr;
  718.     {$IFC NOT GENERATINGCFM}
  719.     INLINE $7007, $AAF0;
  720.     {$ENDC}
  721. FUNCTION CSGetStatus(VAR pb: GetStatusPB): OSErr;
  722.     {$IFC NOT GENERATINGCFM}
  723.     INLINE $7008, $AAF0;
  724.     {$ENDC}
  725. FUNCTION CSValidateCIS(VAR pb: ValidateCISPB): OSErr;
  726.     {$IFC NOT GENERATINGCFM}
  727.     INLINE $7009, $AAF0;
  728.     {$ENDC}
  729. FUNCTION CSGetFirstClient(VAR pb: GetClientPB): OSErr;
  730.     {$IFC NOT GENERATINGCFM}
  731.     INLINE $700F, $AAF0;
  732.     {$ENDC}
  733. FUNCTION CSGetNextClient(VAR pb: GetClientPB): OSErr;
  734.     {$IFC NOT GENERATINGCFM}
  735.     INLINE $7010, $AAF0;
  736.     {$ENDC}
  737. FUNCTION CSGetClientInfo(VAR pb: GetClientInfoPB): OSErr;
  738.     {$IFC NOT GENERATINGCFM}
  739.     INLINE $7011, $AAF0;
  740.     {$ENDC}
  741. FUNCTION CSResetCard(VAR pb: ResetCardPB): OSErr;
  742.     {$IFC NOT GENERATINGCFM}
  743.     INLINE $7012, $AAF0;
  744.     {$ENDC}
  745. FUNCTION CSRequestWindow(VAR pb: ReqModRelWindowPB): OSErr;
  746.     {$IFC NOT GENERATINGCFM}
  747.     INLINE $7013, $AAF0;
  748.     {$ENDC}
  749. FUNCTION CSModifyWindow(VAR pb: ReqModRelWindowPB): OSErr;
  750.     {$IFC NOT GENERATINGCFM}
  751.     INLINE $7014, $AAF0;
  752.     {$ENDC}
  753. FUNCTION CSReleaseWindow(VAR pb: ReqModRelWindowPB): OSErr;
  754.     {$IFC NOT GENERATINGCFM}
  755.     INLINE $7015, $AAF0;
  756.     {$ENDC}
  757. FUNCTION CSRequestConfiguration(VAR pb: GetModRequestConfigInfoPB): OSErr;
  758.     {$IFC NOT GENERATINGCFM}
  759.     INLINE $701B, $AAF0;
  760.     {$ENDC}
  761. FUNCTION CSModifyConfiguration(VAR pb: GetModRequestConfigInfoPB): OSErr;
  762.     {$IFC NOT GENERATINGCFM}
  763.     INLINE $701C, $AAF0;
  764.     {$ENDC}
  765. FUNCTION CSAccessConfigurationRegister(VAR pb: AccessConfigurationRegisterPB): OSErr;
  766.     {$IFC NOT GENERATINGCFM}
  767.     INLINE $701D, $AAF0;
  768.     {$ENDC}
  769. FUNCTION CSReleaseConfiguration(VAR pb: ReleaseConfigurationPB): OSErr;
  770.     {$IFC NOT GENERATINGCFM}
  771.     INLINE $701E, $AAF0;
  772.     {$ENDC}
  773. FUNCTION CSGetClientEventMask(VAR pb: GetSetClientEventMaskPB): OSErr;
  774.     {$IFC NOT GENERATINGCFM}
  775.     INLINE $701F, $AAF0;
  776.     {$ENDC}
  777. FUNCTION CSSetClientEventMask(VAR pb: GetSetClientEventMaskPB): OSErr;
  778.     {$IFC NOT GENERATINGCFM}
  779.     INLINE $7020, $AAF0;
  780.     {$ENDC}
  781. FUNCTION CSRequestSocketMask(VAR pb: ReqRelSocketMaskPB): OSErr;
  782.     {$IFC NOT GENERATINGCFM}
  783.     INLINE $7021, $AAF0;
  784.     {$ENDC}
  785. FUNCTION CSReleaseSocketMask(VAR pb: ReqRelSocketMaskPB): OSErr;
  786.     {$IFC NOT GENERATINGCFM}
  787.     INLINE $7022, $AAF0;
  788.     {$ENDC}
  789.  
  790. {$ALIGN RESET}
  791. {$POP}
  792.  
  793. {$SETC UsingIncludes := CardServicesIncludes}
  794.  
  795. {$ENDC} {__CARDSERVICES__}
  796.  
  797. {$IFC NOT UsingIncludes}
  798.  END.
  799. {$ENDC}
  800.